﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using debioscoopincdrie.Model;

namespace debioscoopincdrie.Managers
{
    class ObjectManager
    {
         #region Fields
        private static ObjectManager INSTANCE;
        #endregion

        #region Constructors
        private ObjectManager()
        {
        }
        #endregion

        #region Static functions
        public static ObjectManager GetManager()
        {
            if (INSTANCE == null)
            {
                INSTANCE = new ObjectManager();
            }

            return INSTANCE;
        }
        #endregion

        public void addObject(string name, string description, Enums.ObjectStatus status)
        {
            voorwerp foundObject = new voorwerp();
            foundObject.naam = name;
            foundObject.beschrijving = description;
            foundObject.m_status = status.ToString();
            DatabaseManager.GetManager().GetEntities().voorwerp.Add(foundObject);
            DatabaseManager.GetManager().SaveChanges();
        }

        public List<voorwerp> getObjetsWithStatus( Enums.ObjectStatus status )
        {
            return DatabaseManager.GetManager().GetEntities().voorwerp.Where(b => b.m_status.Equals(status.ToString())).ToList();
        }

        public List<voorwerp> getAllObjects()
        {
            return DatabaseManager.GetManager().GetEntities().voorwerp.ToList();
        }

        public int getTotalObjectCount()
        {
            return DatabaseManager.GetManager().GetEntities().voorwerp.Count();
        }

        public voorwerp getObject(int objectId)
        {
            return DatabaseManager.GetManager().GetEntities().voorwerp.FirstOrDefault(b => b.id == objectId);
        }

        public List<voorwerp> getObjectsLike( string searchName )
        {
            return DatabaseManager.GetManager().GetEntities().voorwerp.Where(p => p.naam.Contains(searchName) || p.beschrijving.Contains(searchName) || p.m_status.Contains( searchName)).ToList();
        }
    }
}
